import json
from datetime import datetime

class GlBookSumRequestParams:
    """
    用于构建财务账簿汇总查询请求参数的类
    """

    # 固定参数（已按需求修改）
    BASE_PARAMS = {
        "init_date_start": "2025-08-01T00:00:00.000Z",
        "endAccountGrade": "1",
        "currencyId": "0",
        "beginAccountGrade": "1",
        "nodatanodisplay": "1",
        "init_date_end": "2025-08-01T00:00:00.000Z",
        "accountcode": "",
        "onlyShowEndAccount": False,
        "valueEqZeroIfShow": True,
        "begindate": "2025-09",  # 已固定为1970-01（原示例中的2021-01是笔误）
        "page": {
            "pageSize": 100000000,  # 已修改为100000（原1000000）
            "currentPage": 1
        },
        "isCalcQuantity": False,
        "isCalcMulti": False
    }

    def __init__(self, begindate,enddate=None):
        """
        初始化请求参数

        :param enddate: 结束日期（格式: YYYY-MM），若未提供则使用当前系统月份
        """
        self.params = self.BASE_PARAMS.copy()
        self.set_enddate(begindate,enddate)

    def set_enddate(self, begindate,enddate=None):
        """
        设置结束日期（自动使用当前系统月份）

        :param enddate: 结束日期（格式: YYYY-MM），若未提供则使用当前系统月份
        """
        if enddate is None:
            enddate = datetime.now().strftime("%Y-%m")
        self.params["enddate"] = enddate
        self.params["begindate"] = begindate
        return self

    def to_request_body(self):
        """
        构建完整的请求体

        :return: 包含interfaceName, methodName, methodParam的字典
        """
        method_param_str = json.dumps([self.params])

        return {
            "interfaceName": "com.ttk.gl.facade.IGlBookSumFacade",
            "methodName": "query",
            "methodParam": method_param_str
        }

    def __str__(self):
        """返回参数的字符串表示（用于调试）"""
        return f"GlBookSumRequestParams(begindate={self.params['begindate']}, enddate={self.params['enddate']})"